//package com.bsj.power.pls.webSocket;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.bsj.power.common.def.dto.locationDevice.MsgDTO;
//import com.bsj.power.common.def.vo.pls.httpVo.HttpTagPosVO;
//import com.bsj.power.pls.file.uwbData.WRFileBaseUntil;
//import com.bsj.tools.DateUntil;
//import lombok.extern.slf4j.Slf4j;
//import org.java_websocket.WebSocket;
//import org.java_websocket.handshake.ClientHandshake;
//import org.java_websocket.server.WebSocketServer;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.net.InetSocketAddress;
//import java.util.Date;
//import java.util.LinkedList;
//import java.util.List;
//
//import static com.bsj.tools.DateUntil.TIME_STANDARD_FORMAT;
//
///**
// * @author LiJiaXin
// * @version 1.0.0
// * @description WebsocketService
// * @time 2024/5/21 16:27
// */
//@Slf4j
//@Component
//public class WebsocketService {
//
//    @Autowired
//    private WRFileBaseUntil wrFileBaseUntil;
//
//    //    private Map<String, WebSocket> webSockets = new ConcurrentHashMap<>();
//    private List<WebSocket> webSockets = new LinkedList<>();
//
//    public void sendData(MsgDTO msgDTO) {
//        webSockets.forEach(webSocket -> {
//            webSocket.send(JSONObject.toJSONString(msgDTO));
//        });
////        WebSocket webSocket = webSockets.getACDeviceStatusData(sn);
////        if (webSocket != null) {
////            webSocket.send(JSONObject.toJSONString(msgDto));
////        }
//    }
//
//    public void start() {
//        WebsocketServiceUntil websocketServiceUntil = new WebsocketServiceUntil(new InetSocketAddress(9527));
//        websocketServiceUntil.start();
//        log.info("websocket服务端启动: {}", websocketServiceUntil.getPort());
//    }
//
//    public class WebsocketServiceUntil extends WebSocketServer {
//        public WebsocketServiceUntil(InetSocketAddress inetSocketAddress) {
//            super(inetSocketAddress);
//        }
//
//        @Override
//        public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {
//            // ws://192.168.130.7:9527/sn=11
////            String resourceDescriptor = webSocket.getResourceDescriptor();
////            String sn = analysisSn(resourceDescriptor);
////            if (sn == null) {
////                webSocket.send("Param Is Fail!");
////                webSocket.close();
////            }
//            webSockets.add(webSocket);
//            log.info("websocket客户端连接上线: {}", webSocket.getRemoteSocketAddress().getHostName());
//            //TODO
////            TestThread testThread = new TestThread(webSocket);
////            testThread.start();
//        }
//
//        public class TestThread extends Thread {
//            private WebSocket webSocket;
//
//            public TestThread(WebSocket webSocket){
//                this.webSocket = webSocket;
//            }
//            @Override
//            public void run(){
//                try {
//                    String sn = "9324135059403350194";
//                    List<byte[]> listBytes = wrFileBaseUntil.readDataBytes(sn, 1715668800000L, 1715755200000L);
//                    for (byte[] bytes : listBytes) {
//                        String data = new String(bytes);
//                        HttpTagPosVO httpTagPosVO = JSON.parseObject(data, HttpTagPosVO.class);
//                        long time = httpTagPosVO.getTime();
//                        httpTagPosVO.setStrTime(DateUntil.dateToStr(TIME_STANDARD_FORMAT, new Date(time)));
//                        double[] pos = httpTagPosVO.getPos();
//                        //纬度
//                        double lat = 0.00000493 * pos[0] + 0.00000755 * pos[1] + 40.237356;
//                        //经度
//                        double lng = 0.00000985 * pos[0] + (-0.00000641 * pos[1]) + 116.084125;
//                        //同步给到网页展示
//                        MsgDTO msgDTO = new MsgDTO();
//                        msgDTO.setId(sn);
//                        //基准设备数据
//                        msgDTO.setType(1);
//                        msgDTO.setLat(lat);
//                        msgDTO.setLng(lng);
//                        msgDTO.setData(httpTagPosVO);
//                        String string = JSONObject.toJSONString(msgDTO);
//                        webSocket.send(string);
//                        log.info("模拟数据发送： {}", string);
//                        try {
//                            Thread.sleep(1000);
//                        } catch (InterruptedException e) {
//                            e.printStackTrace();
//                        }
//                    }
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//
//        @Override
//        public void onClose(WebSocket webSocket, int i, String s, boolean b) {
////            String sn = analysisSn(webSocket.getResourceDescriptor());
////            if (sn != null) {
////                webSockets.remove(sn);
////            }
//            webSockets.remove(webSocket);
//        }
//
//        @Override
//        public void onMessage(WebSocket webSocket, String s) {
//            log.info("websocket服务端接收消息： {}", s);
//        }
//
//        @Override
//        public void onError(WebSocket webSocket, Exception e) {
////            String sn = analysisSn(webSocket.getResourceDescriptor());
////            if (sn != null) {
////                webSockets.remove(webSocket);
////            }
//            webSockets.remove(webSocket);
//        }
//
//        @Override
//        public void onStart() {
//
//        }
//    }
//
//    private String analysisSn(String url) {
//        String[] split = url.split("/");
//        if (split.length < 1) {
//            return null;
//        }
//        String[] sp1 = split[1].split("=");
//        if (sp1.length < 2) {
//            return null;
//        }
//        if (!"sn".equalsIgnoreCase(sp1[0])) {
//            //不是规定sn号，则认为是错误链接
//            return null;
//        }
//        return sp1[1];
//    }
//
//}
